﻿using S7.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zhaoxi.FactoryDeviceSystem.Utils
{
    // 工具类：地址解析器
    public static class AddressParser
    {
        // 解析地址字符串（如"Q1.0"），返回字节和位
        // 元组是一种轻量级的数据结构，能够将多个值组合成一个单一的对象。
        // 在C#里，从C# 7.0开始就支持创建和使用元组
        public static (DataType dataType, int byteAddr, byte bitAddr) Parse(string address)
        {
            if (string.IsNullOrEmpty(address))
                throw new ArgumentException("地址不能为空");

            // 提取类型前缀（I/Q/M等）
            DataType type;
            switch (address[0]) // 传统的 switch 语句
            {
                case 'I':
                    type = DataType.Input;
                    break;
                case 'Q':
                    type = DataType.Output;
                    break;
                case 'M':
                    type = DataType.Memory;
                    break;
                default:
                    throw new ArgumentException($"无效地址类型: {address}");
            }

            // 拆分字节和位（如"1.0"）
            // 这行代码主要执行了两个操作，分别是截取字符串和分割字符串            
            string[] parts = address.Substring(1).Split('.');
            if (parts.Length != 2 || !int.TryParse(parts[0], out int byteAddr) || !byte.TryParse(parts[1], out byte bitAddr))
                throw new ArgumentException($"地址格式错误: {address}");

            return (type, byteAddr, bitAddr);
        }
    }
}
